// 类的基本使用
class Greeter {
  public greeting: string; // 先声明this所具备的属性
  public gname: string; // 先声明this所具备的属性
  protected gnum: number = 100;
  constructor(message: string, name: string) {
    this.greeting = message; // 在构造器中给属性greeting赋初始值
    this.gname = name;
  }
  public greet() {
    return "Hello, " + this.gname;
  }
}

let greeter = new Greeter("world", "小王");
console.log(greeter.greeting, greeter.greet());
// console.log(greeter.gnum);

class Man extends Greeter {
  private _age: number = 0; // 私有属性
  msex: string;
  constructor(greet: string, mname: string, msex: string) {
    super(greet, mname); // 调用父类的constructor
    this.msex = msex;
  }
  getAge() {
    console.log(this._age, this.gnum);
  }
}
let man = new Man("china", "张三", "男");
console.log(man.greeting, man.gname, man.greet(), man.msex);
// console.log(man.gnum);

// 三个修饰符:
// public：默认修饰符，一个class类中，默认所有的属性和方法都有public修饰。它表示公共的属性和方法：在类内部、类外部、子类都可以使用这些方法和属性。
// private：它表示私有的属性和方法：只能在类内部使用这些方法和属性。
// protected：它表示受保护的属性和方法：只能在父类内部和子类内部中，使用这些方法和属性。父类和子类的外部不能使用。
// readonly: 公共的只读的属性和方法
